<!--
 * @Author: your name
 * @Date: 2021-04-12 22:52:31
 * @LastEditTime: 2021-04-12 23:28:41
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \JavaScript\09 - 数组扁平化.html
-->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    let arr = [1, 2, 3, [4, 5, 6], [7, [8, 9, [10, [17]]]]]
    let res = []
    // 第一种：ES6的flat方法, chrome版本大于69才可以使用
    // arr = arr.flat(2) // [1, 2, 3, 4, 5, 6, 7, 8, 9, [10, [17]]]
    // arr = arr.flat(Infinity) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 17]

    // 第二种：转化为字符串
    // 1. 使用toString()转化的方法
    // arr = arr.toString() // 1,2,3,4,5,6,7,8,9,10,17
    // arr = arr.split(',') // ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "17"]
    // arr = arr.map(val => Number(val)) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 17]
    // 将以上合并起来就是：
    // arr = arr.toString().split(',').map(val =>Number(val)) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 17]

    // 2.使用JSON.stringify()方法转化为字符串，结合正则表达式的方法
    // arr = JSON.stringify(arr) // [1,2,3,[4,5,6],[7,[8,9,[10,[17]]]]]
    // arr = arr.replace(/(\[|\])/g, '') // 将方括号去掉：1,2,3,4,5,6,7,8,9,10,17
    // arr = arr.split(',') // ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "17"]
    // arr = arr.map(val => Number(val)) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 17]
    // 将以上合并起来就是：
    // arr = JSON.stringify(arr).replace(/(\[|\])/g, '').split(',').map(val => Number(val)) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 17]
    
    // 第三种：循环法
    // 1.while循环实现 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 17]
    // some当有一个满足条件就返回true
    // while(arr.some(val => Array.isArray(val))) {
    //   arr = [].concat(...arr)
    // }

    // 2.递归实现
    function fn(arr) {
      let result = []
      for (let i = 0; i <arr.length; i++) {
        const cur = arr[i]
        if (Array.isArray(cur)) {
          result = result.concat(fn(cur))
        } else {
          result.push(cur)
        }
      }
      return result
    }
    arr = fn(arr)

    
    console.log(arr);

  </script>
</body>
</html>